home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / ici / ici.cpi / smash.c < prev    next >
C/C++ Source or Header  |  1994-10-27  |  866b  |  42 lines

  1. #include "fwd.h"
  2.  
  3. /*
  4.  * Return an argv style array of pointers to each of the elemnts of
  5.  * str where each element is delimited by delim.  The return'ed array has
  6.  * been malloced and may be free'd with a single free.
  7.  */
  8. char **
  9. smash(str, delim)
  10. register char    *str;
  11. register int    delim;
  12. {
  13.     register char    *p;
  14.     register int    i;
  15.     register char    **ptrs;
  16.     extern char        *strchr();
  17.     int            n;
  18.  
  19.     i = 0;
  20.     for (p = str; (p = strchr(p, delim)) != NULL; p++)
  21.     i++;
  22.     /*
  23.      * XENIX compiler bug workaround:
  24.      */
  25.     n = strlen(str);
  26.     n += (i + 2) * sizeof(char *) + 1;
  27.     if ((ptrs = (char **)zalloc(n)) == NULL)
  28.     return NULL;
  29.  
  30.     p = (char *)ptrs + (i + 2) * sizeof(char *);
  31.     strcpy(p, str);
  32.     ptrs[0] = p;
  33.     i = 1;
  34.     while ((p = strchr(p, delim)) != NULL)
  35.     {
  36.     *p++ = '\0';
  37.     ptrs[i++] = p;
  38.     }
  39.     ptrs[i] = NULL;
  40.     return ptrs;
  41. }
  42.